package com.hrm.houfei.biz.impl;

import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;

import com.hrm.houfei.biz.IJobChangeBiz;
import com.hrm.houfei.dao.IJobchangeDAO;
import com.hrm.houfei.dao.IPersonFileDAO;
import com.hrm.houfei.po.Jobchange;
import com.hrm.houfei.po.Personfile;
import com.hrm.houfei.utils.MyDate;

/**
 * @date 2009-04-10
 * @author 侯非
 * @title 员工调动管理业务实现类
 */
public class JobChangeBizImpl implements IJobChangeBiz {

	// 员工调动dao接口(由spring来注入)
	IJobchangeDAO ijobchdao = null;
	// 员工信息dao接口注入到当前业务类(由spring来注入)
	IPersonFileDAO ipersondao = null;

	public void setIpersondao(IPersonFileDAO ipersondao) {
		this.ipersondao = ipersondao;
	}

	public void setIjobchdao(IJobchangeDAO ijobchdao) {
		this.ijobchdao = ijobchdao;
	}

	public JobChangeBizImpl() {
		super();
	}

	/**
	 * 员工调用登记
	 * 
	 * @param jobch
	 *            员工倒动实体
	 * @return 成功返回true,否则返回false
	 */
	public boolean addJobChange(Jobchange jobch) {
		try {

			// 获取员工档案编号
			String fileId = jobch.getPfFileId();
			// 获取员工档案信息实体
			Personfile pf = (Personfile) this.ipersondao.findByProperty(
					"pfFileId", fileId).get(0);
			// ///////////////////////////////////////////////////////////////
			jobch.setPersonfile(pf);
			String date = MyDate.getNowDate("yyyy-MM-dd HH:mm:ss");
			jobch.setJcAddDate(date);
			jobch.setJcState("未审核");
			this.ijobchdao.save(jobch);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * 多条件分页模糊查询显示员工调动信息
	 * 
	 * @param addDate
	 *            登记时间
	 * @param pfName
	 *            登记人姓名
	 * @param start
	 *            索引
	 * @param limit
	 *            每页要显示的记录的条数
	 * @return List<Jobchange>
	 */
	public List<Jobchange> showAllJobChange(String addDate, String pfName,
			String start, String limit) {
		// 离线查询
		DetachedCriteria criteria = DetachedCriteria.forClass(Jobchange.class);
		// 给分页参数设置默认值
		if ("".equals(start) || null == start) {
			start = "0";
		}
		if ("".equals(limit) || null == limit) {
			limit = "10";
		}

		// 如果条件(jcAddDate)不为空则将条件附加上
		if (!"".equals(addDate) && null != addDate) {
			criteria.add(Restrictions.like("jcAddDate", addDate,
					MatchMode.ANYWHERE));
		}
		// 如果条件(pfName)不为空则将条件附加上
		if (!"".equals(pfName) && null != pfName) {
			criteria.add(Restrictions
					.like("pfName", pfName, MatchMode.ANYWHERE));
		}

		// 调用dao,执行分页查询
		List<Jobchange> list = this.ijobchdao.findByPage(criteria, Integer
				.parseInt(start), Integer.parseInt(limit));
		return list;
	}

	/**
	 * 条件查询员工调动信息记录的条数
	 * 
	 * @param addDate
	 *            登记时间
	 * @param pfName
	 *            登记人姓名
	 * @return 总记录的条数
	 */
	public int geJobChangeListCount(String addDate, String pfName) {
		// 离线查询
		DetachedCriteria criteria = DetachedCriteria.forClass(Jobchange.class);
		// 如果条件(jcAddDate)不为空则将条件附加上
		if (!"".equals(addDate) && null != addDate) {
			criteria.add(Restrictions.like("jcAddDate", addDate,
					MatchMode.ANYWHERE));
		}
		// 如果条件(pfName)不为空则将条件附加上
		if (!"".equals(pfName) && null != pfName) {
			criteria.add(Restrictions
					.like("pfName", pfName, MatchMode.ANYWHERE));
		}
		// 调用dao,执行分页查询
		int result = this.ijobchdao.getListCountByCriteria(criteria);
		return result;
	}

	/**
	 * 审核人员调动信息
	 * 
	 * @param checkName
	 *            审核人姓名
	 * @param checkContent
	 *            审核意见
	 * @param pkid
	 *            主键编号
	 * @return 成功返回true,失败返回false
	 */
	public boolean checkJobChange(String checkName, String checkContent,
			String pkid) {
		try {
			Jobchange jc = this.ijobchdao.findById(Integer.parseInt(pkid));
			jc.setJcCheckComment(checkContent);
			jc.setUserCheckName(checkName);
			jc.setJcState("通过审核");
			jc.setJcCheckDate(MyDate.getNowDate("yyyy-MM-dd HH:mm:ss"));
			this.ijobchdao.update(jc);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

}
